package cn.icare.cms;

import cn.icare.cms.dao.po.Order;
import cn.icare.cms.dao.po.OrderItem;
import cn.icare.cms.model.enums.PayTypeEnum;
import cn.icare.cms.model.ro.AddOrderRo;
import cn.icare.cms.model.ro.SearchOrderListRo;
import cn.icare.cms.model.ro.UpdateOrderSysMemoRo;
import cn.icare.cms.model.vo.rest.MsgDatasVO;
import cn.icare.cms.model.vo.rest.OrderVo;

import java.util.List;
import java.util.Map;

public interface OrderService {

    long createOne(AddOrderRo ro);

    boolean updateStatus(Long id, Integer status);

    /**
     * 付款完成后更新状态
     *
     * @param id          订单id
     * @param payTypeEnum 付款类型枚举
     * @return
     */
    boolean updatePayFinished(Long id, PayTypeEnum payTypeEnum);

    /**
     * 配送完成后更新状态
     *
     * @param id              订单id
     * @param arrivalMemberId 配送员Id
     * @return
     */
    boolean updateArrivalFinished(Long id, Long arrivalMemberId);

    boolean deleteOne(Long id);

    boolean deleteBatch(List<Long> ids);

    Order getOne(Long id);

    MsgDatasVO getList(SearchOrderListRo ro);

    OrderVo getDetail(Long id);

    List<OrderItem> getOrderItems(Long id);

    /**
     * 根据订单号获取订单信息
     *
     * @param code 订单编号
     * @return
     */
    Order getOneByCode(String code);

    /**
     * 获取待取消的订单列表
     *
     * @return
     */
    List<Order> getNeedCancelList();


    /**
     * 订单开始配送更新状态
     *
     * @param id              订单id
     * @param arrivalMemberId 配送员Id
     * @return
     */
    boolean updateSendStart(Long id, Long arrivalMemberId);

    List<Integer> statisticOrderList(Integer status);

    /**
     * 导出待发货商品列表，需要根据商品进行数量汇总
     * @param beginTime 订单创建时间范围-开始时间
     * @param endTime 订单创建时间范围-结束时间
     * @return
     */
    List<Map<String,Object>> getExportItemList(String beginTime,String endTime,String areaCode);


    /**
     * 一键批量更新订单状态

     * @param arrivalMemberId 配送员Id
     * @return
     */
    boolean batchUpdateSend(Long arrivalMemberId);

    /**
     * 管理后台订单查询接口
     * @param ro
     * @return
     */
    MsgDatasVO getSysList(SearchOrderListRo ro);


    /**
     * 更新订单中管理员备注信息
     * @param ro
     * @return
     */
    boolean updateSysMemo(UpdateOrderSysMemoRo ro);


    /**
     * 导出已发货订单信息
     * @param beginTime 订单创建时间范围-开始时间
     * @param endTime 订单创建时间范围-结束时间
     * @return
     */
    List<Map<String,Object>> getFinishedList(String beginTime,String endTime,String areaCode);


    /**
     * 团长端订单查询功能接口
     * @param masterId
     * @param beginTime
     * @param endTime
     * @param pageNum
     * @param pageSize
     * @return
     */
    Map<String,Object> getMasterOrderList(Long masterId,String beginTime,String endTime,Integer pageNum,Integer pageSize);

    /**
     * 团长端 今日订单量、今日销售额、累计销售额统计接口
     * @param masterId
     * @return
     */
    Map<String,Object> getMasterOrderTotal(Long masterId,String beginTime, String endTime);
}
